import { visit } from "recast";
/**
 * 替换单字符变量的名字为长名
 * 方便后续批量编辑
 * @param {抽象语法树} ast
 */
const replaceVarName = (ast) => {
  const dict = {};
  // 访问所有的变量声明获取变量名映射字典
  visit(ast, {
    visitVariableDeclarator: function (path) {
      if (path.node.id.name.length === 1) {
        if (!dict[path.node.id.name]) {
          dict[path.node.id.name] = `var_${path.node.id.name}`;
        }
      }
      this.traverse(path)
    },
  });

  // 访问所有的函数声明，加入变量名映射字典
  visit(ast, {
    visitFunctionDeclaration: function (path) {
      if (path.node.id.name.length === 1) {
        if (!dict[path.node.id.name]) {
          dict[path.node.id.name] = `func_${path.node.id.name}`;
        }
      }
      this.traverse(path)
    },
  });

  // 替换变量名字
  visit(ast, {
    visitIdentifier: function (path) {
      if (path.node.name.length === 1) {
        if (dict[path.node.name]) {
          path.node.name = dict[path.node.name];
        }
      }
      this.traverse(path)
    },
  });
};

export default replaceVarName;
